和为S的两个数字

和为S的两个数字

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。对应每个测试案例,输出两个数,小的先输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function FindNumbersWithSum(array, sum)
{
// write code here
let half=sum>>1;
let i=0;
const res=[]
while(half--){

if(array.indexOf(sum-array[i])!=-1&&array.indexOf(sum-array[i])!=i){
var t=array.indexOf(sum-array[i])
const temp=[];
temp.push(array[i]);
temp.push(array[t]);
res.push(temp)
}
i++;
}
if(res.length==0){
return [];
}
let minproduct=res[0][0]*res[0][1]
let minindex=0;

for(var j=0;j<res.length;j++){
if(res[j][0]*res[j][1]<minproduct){
minproduct=res[j][0]*res[j][1];
minindex=j;
}
}

const ans=[]

ans.push(res[minindex][0]);
ans.push(res[minindex][1]);
ans.sort(function(a,b){return a-b});
return ans;
}